Jackson Enum ডেটার Serialization (Java Enum থেকে JSON এ রূপান্তর) এবং Deserialization (JSON থেকে Java Enum এ রূপান্তর) এর জন্য ডিফল্ট পদ্ধতি ব্যবহার করে। তবে, কখনও কখনও Enum ডেটা কাস্টম ফরম্যাটে Serialize করতে হতে পারে। এ জন্য Jackson এ কাস্টম Serializer তৈরি করা হয়।
১. ডিফল্ট Serialization পদ্ধতি
Jackson ডিফল্টভাবে Enum এর name() মেথড ব্যবহার করে JSON ডেটা তৈরি করে।
উদাহরণ
public enum Status {
ACTIVE,
INACTIVE,
PENDING
}
Serialization
import com.fasterxml.jackson.databind.ObjectMapper;
public class DefaultEnumSerialization {
public static void main(String[] args) throws Exception {
Status status = Status.ACTIVE;
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(status);
System.out.println(json); // Output: "ACTIVE"
}
}
২. Enum এর জন্য Custom Serializer তৈরি
স্টেপ ১: Custom Serializer ক্লাস তৈরি
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
public class StatusSerializer extends StdSerializer<Status> {
public StatusSerializer() {
super(Status.class);
}
@Override
public void serialize(Status value, JsonGenerator gen, SerializerProvider provider) throws IOException {
// Custom Serialization Logic
gen.writeString(value.name().toLowerCase()); // Example: ACTIVE -> "active"
}
}
স্টেপ ২: Enum ক্লাসে Serializer সংযুক্ত করা
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@JsonSerialize(using = StatusSerializer.class)
public enum Status {
ACTIVE,
INACTIVE,
PENDING
}
Serialization উদাহরণ
import com.fasterxml.jackson.databind.ObjectMapper;
public class CustomEnumSerialization {
public static void main(String[] args) throws Exception {
Status status = Status.ACTIVE;
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(status);
System.out.println(json); // Output: "active"
}
}
৩. Enum এর সাথে অতিরিক্ত ডেটা Serialize করা
স্টেপ ১: Enum এ অতিরিক্ত ফিল্ড যোগ করা
public enum Status {
ACTIVE("The user is active"),
INACTIVE("The user is inactive"),
PENDING("The user is pending approval");
private final String description;
Status(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
স্টেপ ২: Custom Serializer তৈরি
public class StatusSerializer extends StdSerializer<Status> {
public StatusSerializer() {
super(Status.class);
}
@Override
public void serialize(Status value, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartObject();
gen.writeStringField("status", value.name());
gen.writeStringField("description", value.getDescription());
gen.writeEndObject();
}
}
স্টেপ ৩: Serialization
@JsonSerialize(using = StatusSerializer.class)
public enum Status {
ACTIVE("The user is active"),
INACTIVE("The user is inactive"),
PENDING("The user is pending approval");
private final String description;
Status(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
}
import com.fasterxml.jackson.databind.ObjectMapper;
public class CustomEnumSerializationWithDetails {
public static void main(String[] args) throws Exception {
Status status = Status.ACTIVE;
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(status);
System.out.println(json);
}
}
Output:
{
"status": "ACTIVE",
"description": "The user is active"
}
৪. Enum এর Deserialization কাস্টমাইজ করা
Custom Deserializer তৈরি
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
public class StatusDeserializer extends JsonDeserializer<Status> {
@Override
public Status deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String value = p.getText().toUpperCase(); // Example: "active" -> "ACTIVE"
return Status.valueOf(value);
}
}
Enum ক্লাসে Deserializer সংযুক্ত করা
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@JsonDeserialize(using = StatusDeserializer.class)
public enum Status {
ACTIVE,
INACTIVE,
PENDING
}
Deserialization উদাহরণ
public class CustomEnumDeserialization {
public static void main(String[] args) throws Exception {
String json = "\"active\""; // JSON string
ObjectMapper mapper = new ObjectMapper();
Status status = mapper.readValue(json, Status.class);
System.out.println(status); // Output: ACTIVE
}
}
- Custom Serializer ব্যবহার করে Enum এর ফরম্যাট কাস্টমাইজ করা যায়।
- Custom Deserializer ব্যবহার করে JSON থেকে Enum এ ডেটা মেপিং নিয়ন্ত্রণ করা যায়।
- এই পদ্ধতিগুলো API ডেভেলপমেন্টে, বিশেষত যেখানে Enum ডেটা হিউম্যান-রিডেবল বা কাস্টম ফরম্যাটে থাকা দরকার, সেগুলোতে কার্যকর।
Content added By
Read more